define( function(require) {
    /*!
     * artDialog 4.1.6
     * Date: 2012-07-16 22:57
     * http://code.google.com/p/artdialog/
     * (c) 2009-2012 TangBin, http://www.planeArt.cn
     *
     * This is licensed under the GNU LGPL, version 2.1 or later.
     * For details, see: http://creativecommons.org/licenses/LGPL/2.1/
     */

    (function (window, undefined) {
//if (window.jQuery) return jQuery;

        var $ = window.art = function (selector, context) {
                return new $.fn.init(selector, context);
            },
            readyBound = false,
            readyList = [],
            DOMContentLoaded,
            isOpacity = 'opacity' in document.documentElement.style,
            quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,
            rclass = /[\n\t]/g,
            ralpha = /alpha\([^)]*\)/i,
            ropacity = /opacity=([^)]*)/,
            rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/;

        if (window.$ === undefined) window.$ = $;
        $.fn = $.prototype = {
            constructor: $,

            /**
             * DOM 就绪
             * @param	{Function}	回调函数
             */
            ready: function (callback) {
                $.bindReady();

                if ($.isReady) {
                    callback.call(document, $);
                } else if (readyList) {
                    readyList.push(callback);
                };

                return this;
            },

            /**
             * 判断样式类是否存在
             * @param	{String}	名称
             * @return	{Boolean}
             */
            hasClass: function (name) {
                var className = ' ' + name + ' ';
                if ((' ' + this[0].className + ' ').replace(rclass, ' ')
                    .indexOf(className) > -1) return true;

                return false;
            },

            /**
             * 添加样式类
             * @param	{String}	名称
             */
            addClass: function (name) {
                if (!this.hasClass(name)) this[0].className += ' ' + name;

                return this;
            },

            /**
             * 移除样式类
             * @param	{String}	名称
             */
            removeClass: function (name) {
                var elem = this[0];

                if (!name) {
                    elem.className = '';
                } else
                if (this.hasClass(name)) {
                    elem.className = elem.className.replace(name, ' ');
                };

                return this;
            },

            /**
             * 读写样式<br />
             * css(name) 访问第一个匹配元素的样式属性<br />
             * css(properties) 把一个"名/值对"对象设置为所有匹配元素的样式属性<br />
             * css(name, value) 在所有匹配的元素中，设置一个样式属性的值<br />
             */
            css: function (name, value) {
                var i, elem = this[0], obj = arguments[0];

                if (typeof name === 'string') {
                    if (value === undefined) {
                        return $.css(elem, name);
                    } else {
                        name === 'opacity' ?
                            $.opacity.set(elem, value) :
                            elem.style[name] = value;
                    };
                } else {
                    for (i in obj) {
                        i === 'opacity' ?
                            $.opacity.set(elem, obj[i]) :
                            elem.style[i] = obj[i];
                    };
                };

                return this;
            },

            /** 显示元素 */
            show: function () {
                return this.css('display', 'block');
            },

            /** 隐藏元素 */
            hide: function () {
                return this.css('display', 'none');
            },

            /**
             * 获取相对文档的坐标
             * @return	{Object}	返回left、top的数值
             */
            offset: function () {
                var elem = this[0],
                    box = elem.getBoundingClientRect(),
                    doc = elem.ownerDocument,
                    body = doc.body,
                    docElem = doc.documentElement,
                    clientTop = docElem.clientTop || body.clientTop || 0,
                    clientLeft = docElem.clientLeft || body.clientLeft || 0,
                    top = box.top + (self.pageYOffset || docElem.scrollTop) - clientTop,
                    left = box.left + (self.pageXOffset || docElem.scrollLeft) - clientLeft;

                return {
                    left: left,
                    top: top
                };
            },

            /**
             * 读写HTML - (不支持文本框)
             * @param	{String}	内容
             */
            html: function (content) {
                var elem = this[0];

                if (content === undefined) return elem.innerHTML;
                $.cleanData(elem.getElementsByTagName('*'));
                elem.innerHTML = content;

                return this;
            },

            /**
             * 移除节点
             */
            remove: function () {
                var elem = this[0];

                $.cleanData(elem.getElementsByTagName('*'));
                $.cleanData([elem]);
                elem.parentNode.removeChild(elem);

                return this;
            },

            /**
             * 事件绑定
             * @param	{String}	类型
             * @param	{Function}	要绑定的函数
             */
            bind: function (type, callback) {
                $.event.add(this[0], type, callback);
                return this;
            },

            /**
             * 移除事件
             * @param	{String}	类型
             * @param	{Function}	要卸载的函数
             */
            unbind: function(type, callback) {
                $.event.remove(this[0], type, callback);
                return this;
            }

        };

        $.fn.init = function (selector, context) {
            var match, elem;
            context = context || document;

            if (!selector) return this;

            if (selector.nodeType) {
                this[0] = selector;
                return this;
            };

            if (selector === 'body' && context.body) {
                this[0] = context.body;
                return this;
            };

            if (selector === 'head' || selector === 'html') {
                this[0] = context.getElementsByTagName(selector)[0];
                return this;
            };

            if (typeof selector === 'string') {
                match = quickExpr.exec(selector);

                if (match && match[2]) {
                    elem = context.getElementById(match[2]);
                    if (elem && elem.parentNode) this[0] = elem;
                    return this;
                };
            };

            if (typeof selector === 'function') return $(document).ready(selector);

            this[0] = selector;

            return this;
        };
        $.fn.init.prototype = $.fn;

        /** 空函数 */
        $.noop = function () {};

        /** 检测window */
        $.isWindow = function (obj) {
            return obj && typeof obj === 'object' && 'setInterval' in obj;
        };

        /** 数组判定 */
        $.isArray = function (obj) {
            return Object.prototype.toString.call(obj) === '[object Array]';
        };

        /**
         * 搜索子元素
         * 注意：只支持nodeName或.className的形式，并且只返回第一个元素
         * @param	{String}
         */
        $.fn.find = function (expr) {
            var value, elem = this[0],
                className = expr.split('.')[1];

            if (className) {
                if (document.getElementsByClassName) {
                    value = elem.getElementsByClassName(className);
                } else {
                    value = getElementsByClassName(className, elem);
                };
            } else {
                value = elem.getElementsByTagName(expr);
            };

            return $(value[0]);
        };
        function getElementsByClassName (className, node, tag) {
            node = node || document;
            tag = tag || '*';
            var i = 0,
                j = 0,
                classElements = [],
                els = node.getElementsByTagName(tag),
                elsLen = els.length,
                pattern = new RegExp("(^|\\s)" + className + "(\\s|$)");

            for (; i < elsLen; i ++) {
                if (pattern.test(els[i].className)) {
                    classElements[j] = els[i];
                    j ++;
                };
            };
            return classElements;
        };

        /**
         * 遍历
         * @param {Object}
         * @param {Function}
         */
        $.each = function (obj, callback) {
            var name, i = 0,
                length = obj.length,
                isObj = length === undefined;

            if (isObj) {
                for (name in obj) {
                    if (callback.call(obj[name], name, obj[name]) === false) break;
                };
            } else {
                for (var value = obj[0];
                     i < length && callback.call(value, i, value) !== false;
                     value = obj[++i]) {};
            };

            return obj;
        };

        /**
         * 读写缓存
         * @param		{HTMLElement}	元素
         * @param		{String}		缓存名称
         * @param		{Any}			数据
         * @return		{Any}			如果无参数data则返回缓存数据
         */
        $.data = function (elem, name, data) {
            var cache = $.cache,
                id = uuid(elem);

            if (name === undefined) return cache[id];
            if (!cache[id]) cache[id] = {};
            if (data !== undefined) cache[id][name] = data;

            return cache[id][name];
        };

        /**
         * 删除缓存
         * @param		{HTMLElement}	元素
         * @param		{String}		缓存名称
         */
        $.removeData = function (elem, name) {
            var empty = true,
                expando = $.expando,
                cache = $.cache,
                id = uuid(elem),
                thisCache = id && cache[id];

            if (!thisCache) return;
            if (name) {
                delete thisCache[name];
                for (var n in thisCache) empty = false;
                if (empty) delete $.cache[id];
            } else {
                delete cache[id];
                if (elem.removeAttribute) {
                    elem.removeAttribute(expando);
                } else {
                    elem[expando] = null;
                };
            };
        };

        $.uuid = 0;
        $.cache = {};
        $.expando = '@cache' + + new Date

// 标记元素唯一身份
        function uuid (elem) {
            var expando = $.expando,
                id = elem === window ? 0 : elem[expando];
            if (id === undefined) elem[expando] = id = ++ $.uuid;
            return id;
        };


        /**
         * 事件机制
         * @namespace
         * @requires	[$.data, $.removeData]
         */
        $.event = {

            /**
             * 添加事件
             * @param		{HTMLElement}	元素
             * @param		{String}		事件类型
             * @param		{Function}		要添加的函数
             */
            add: function (elem, type, callback) {
                var cache, listeners,
                    that = $.event,
                    data = $.data(elem, '@events') || $.data(elem, '@events', {});

                cache = data[type] = data[type] || {};
                listeners = cache.listeners = cache.listeners || [];
                listeners.push(callback);

                if (!cache.handler) {
                    cache.elem = elem;
                    cache.handler = that.handler(cache);

                    elem.addEventListener
                        ? elem.addEventListener(type, cache.handler, false)
                        : elem.attachEvent('on' + type, cache.handler);
                };
            },

            /**
             * 卸载事件
             * @param		{HTMLElement}	元素
             * @param		{String}		事件类型
             * @param		{Function}		要卸载的函数
             */
            remove: function (elem, type, callback) {
                var i, cache, listeners,
                    that = $.event,
                    empty = true,
                    data = $.data(elem, '@events');

                if (!data) return;
                if (!type) {
                    for (i in data) that.remove(elem, i);
                    return;
                };

                cache = data[type];
                if (!cache) return;

                listeners = cache.listeners;
                if (callback) {
                    for (i = 0; i < listeners.length; i ++) {
                        listeners[i] === callback && listeners.splice(i--, 1);
                    };
                } else {
                    cache.listeners = [];
                };

                if (cache.listeners.length === 0) {
                    elem.removeEventListener
                        ? elem.removeEventListener(type, cache.handler, false)
                        : elem.detachEvent('on' + type, cache.handler);

                    delete data[type];
                    cache = $.data(elem, '@events');
                    for (var n in cache) empty = false;
                    if (empty) $.removeData(elem, '@events');
                };
            },

            /** @inner 事件句柄 */
            handler: function (cache) {
                return function (event) {
                    event = $.event.fix(event || window.event);
                    for (var i = 0, list = cache.listeners, fn; fn = list[i++];) {
                        if (fn.call(cache.elem, event) === false) {
                            event.preventDefault();
                            event.stopPropagation();
                        };
                    };
                };
            },

            /** @inner Event对象兼容处理 */
            fix: function (event) {
                if (event.target) return event;

                var event2 = {
                    target: event.srcElement || document,
                    preventDefault: function () {event.returnValue = false},
                    stopPropagation: function () {event.cancelBubble = true}
                };
                // IE6/7/8 在原生window.event对象写入数据会导致内存无法回收，应当采用拷贝
                for (var i in event) event2[i] = event[i];
                return event2;
            }

        };

        /**
         * 清理元素集的事件与缓存
         * @requires	[$.removeData, $.event]
         * @param		{HTMLCollection}	元素集
         */
        $.cleanData = function (elems) {
            var i = 0, elem,
                len = elems.length,
                removeEvent = $.event.remove,
                removeData = $.removeData;

            for (; i < len; i ++) {
                elem = elems[i];
                removeEvent(elem);
                removeData(elem);
            };
        };

// DOM就绪事件
        $.isReady = false;
        $.ready = function () {
            if (!$.isReady) {
                if (!document.body) return setTimeout($.ready, 13);
                $.isReady = true;

                if (readyList) {
                    var fn, i = 0;
                    while ((fn = readyList[i++])) {
                        fn.call(document, $);
                    };
                    readyList = null;
                };
            };
        };
        $.bindReady = function () {
            if (readyBound) return;

            readyBound = true;

            if (document.readyState === 'complete') {
                return $.ready();
            };

            if (document.addEventListener) {
                document.addEventListener('DOMContentLoaded', DOMContentLoaded, false);
                window.addEventListener('load', $.ready, false);
            } else if (document.attachEvent) {
                document.attachEvent('onreadystatechange', DOMContentLoaded);
                window.attachEvent('onload', $.ready);
                var toplevel = false;
                try {
                    toplevel = window.frameElement == null;
                } catch (e) {};

                if (document.documentElement.doScroll && toplevel) {
                    doScrollCheck();
                };
            };
        };

        if (document.addEventListener) {
            DOMContentLoaded = function () {
                document.removeEventListener('DOMContentLoaded', DOMContentLoaded, false);
                $.ready();
            };
        } else if (document.attachEvent) {
            DOMContentLoaded = function () {
                if (document.readyState === 'complete') {
                    document.detachEvent('onreadystatechange', DOMContentLoaded);
                    $.ready();
                };
            };
        };

        function doScrollCheck () {
            if ($.isReady) return;

            try {
                document.documentElement.doScroll('left');
            } catch (e) {
                setTimeout(doScrollCheck, 1);
                return;
            };
            $.ready();
        };

// 获取css
        $.css = 'defaultView' in document && 'getComputedStyle' in document.defaultView ?
            function (elem, name) {
                return document.defaultView.getComputedStyle(elem, false)[name];
            } :
            function (elem, name) {
                var ret = name === 'opacity' ? $.opacity.get(elem) : elem.currentStyle[name];
                return ret || '';
            };

// 跨浏览器处理opacity
        $.opacity = {
            get: function (elem) {
                return isOpacity ?
                    document.defaultView.getComputedStyle(elem, false).opacity :
                    ropacity.test((elem.currentStyle
                        ? elem.currentStyle.filter
                        : elem.style.filter) || '')
                        ? (parseFloat(RegExp.$1) / 100) + ''
                        : 1;
            },
            set: function (elem, value) {
                if (isOpacity) return elem.style.opacity = value;
                var style = elem.style;
                style.zoom = 1;

                var opacity = 'alpha(opacity=' + value * 100 + ')',
                    filter = style.filter || '';

                style.filter = ralpha.test(filter) ?
                    filter.replace(ralpha, opacity) :
                    style.filter + ' ' + opacity;
            }
        };

        /**
         * 获取滚动条位置 - [不支持写入]
         * $.fn.scrollLeft, $.fn.scrollTop
         * @example		获取文档垂直滚动条：$(document).scrollTop()
         * @return		{Number}	返回滚动条位置
         */
        $.each(['Left', 'Top'], function (i, name) {
            var method = 'scroll' + name;

            $.fn[method] = function () {
                var elem = this[0], win;

                win = getWindow(elem);
                return win ?
                    ('pageXOffset' in win) ?
                        win[i ? 'pageYOffset' : 'pageXOffset'] :
                        win.document.documentElement[method] || win.document.body[method] :
                    elem[method];
            };
        });

        function getWindow (elem) {
            return $.isWindow(elem) ?
                elem :
                elem.nodeType === 9 ?
                    elem.defaultView || elem.parentWindow :
                    false;
        };

        /**
         * 获取窗口或文档尺寸 - [只支持window与document读取]
         * @example
         获取文档宽度：$(document).width()
         获取可视范围：$(window).width()
         * @return	{Number}
         */
        $.each(['Height', 'Width'], function (i, name) {
            var type = name.toLowerCase();

            $.fn[type] = function (size) {
                var elem = this[0];
                if (!elem) {
                    return size == null ? null : this;
                };

                return $.isWindow(elem) ?
                    elem.document.documentElement['client' + name] || elem.document.body['client' + name] :
                    (elem.nodeType === 9) ?
                        Math.max(
                            elem.documentElement['client' + name],
                            elem.body['scroll' + name], elem.documentElement['scroll' + name],
                            elem.body['offset' + name], elem.documentElement['offset' + name]
                        ) : null;
            };

        });

        /**
         * 简单ajax支持
         * @example
         * $.ajax({
 * 		url: url,
 * 		success: callback,
 * 		cache: cache
 * });
         */
        $.ajax = function (config) {
            var ajax = window.XMLHttpRequest ?
                    new XMLHttpRequest() :
                    new ActiveXObject('Microsoft.XMLHTTP'),
                url = config.url;

            if (config.cache === false) {
                var ts = + new Date,
                    ret = url.replace(/([?&])_=[^&]*/, "$1_=" + ts );
                url = ret + ((ret === url) ? (/\?/.test(url) ? "&" : "?") + "_=" + ts : "");
            };

            ajax.onreadystatechange = function() {
                if (ajax.readyState === 4 && ajax.status === 200) {
                    config.success && config.success(ajax.responseText);
                    ajax.onreadystatechange = $.noop;
                };
            };
            ajax.open('GET', url, 1);
            ajax.send(null);
        };

        /** 动画引擎 - [不支持链式列队操作] */
        $.fn.animate = function (prop, speed, easing, callback) {

            speed = speed || 400;
            if (typeof easing === 'function') callback = easing;
            easing = easing && $.easing[easing] ? easing : 'swing';

            var elem = this[0], overflow,
                fx, parts, start, end, unit,
                opt = {
                    speed: speed,
                    easing: easing,
                    callback: function () {
                        if (overflow != null) elem.style.overflow = '';
                        callback && callback();
                    }
                };

            opt.curAnim = {};
            $.each(prop, function (name, val) {
                opt.curAnim[name] = val;
            });

            $.each(prop, function (name, val) {
                fx = new $.fx(elem, opt, name);
                parts = rfxnum.exec(val);
                start = parseFloat(name === 'opacity'
                    || (elem.style && elem.style[name] != null) ?
                    $.css(elem, name) :
                    elem[name]);
                end = parseFloat(parts[2]);
                unit = parts[3];
                if (name === 'height' || name === 'width') {
                    end = Math.max(0, end);
                    overflow = [elem.style.overflow,
                        elem.style.overflowX, elem.style.overflowY];
                };

                fx.custom(start, end, unit);
            });

            if (overflow != null) elem.style.overflow = 'hidden';

            return this;
        };

        $.timers = [];
        $.fx = function (elem, options, prop) {
            this.elem = elem;
            this.options = options;
            this.prop = prop;
        };

        $.fx.prototype = {
            custom: function (from, to, unit) {
                var that = this;
                that.startTime = $.fx.now();
                that.start = from;
                that.end = to;
                that.unit = unit;
                that.now = that.start;
                that.state = that.pos = 0;

                function t() {
                    return that.step();
                };
                t.elem = that.elem;
                t();
                $.timers.push(t);
                if (!$.timerId) $.timerId = setInterval($.fx.tick, 13);
            },
            step: function () {
                var that = this, t = $.fx.now(), done = true;

                if (t >= that.options.speed + that.startTime) {
                    that.now = that.end;
                    that.state = that.pos = 1;
                    that.update();

                    that.options.curAnim[that.prop] = true;
                    for (var i in that.options.curAnim) {
                        if (that.options.curAnim[i] !== true) {
                            done = false;
                        };
                    };

                    if (done) that.options.callback.call(that.elem);

                    return false;
                } else {
                    var n = t - that.startTime;
                    that.state = n / that.options.speed;
                    that.pos = $.easing[that.options.easing](that.state, n, 0, 1, that.options.speed);
                    that.now = that.start + ((that.end - that.start) * that.pos);
                    that.update();
                    return true;
                };
            },
            update: function () {
                var that = this;
                if (that.prop === 'opacity') {
                    $.opacity.set(that.elem, that.now);
                } else
                if (that.elem.style && that.elem.style[that.prop] != null) {
                    that.elem.style[that.prop] = that.now + that.unit;
                } else {
                    that.elem[that.prop] = that.now;
                };
            }
        };

        $.fx.now = function () {
            return + new Date;
        };

        $.easing = {
            linear: function (p, n, firstNum, diff) {
                return firstNum + diff * p;
            },
            swing: function (p, n, firstNum, diff) {
                return ((-Math.cos(p * Math.PI) / 2) + 0.5) * diff + firstNum;
            }
        };

        $.fx.tick = function () {
            var timers = $.timers;
            for (var i = 0; i < timers.length; i++) {
                !timers[i]() && timers.splice(i--, 1);
            };
            !timers.length && $.fx.stop();
        };

        $.fx.stop = function () {
            clearInterval($.timerId);
            $.timerId = null;
        };

        $.fn.stop = function () {
            var timers = $.timers;
            for (var i = timers.length - 1; i >= 0; i--) {
                if (timers[i].elem === this[0]) timers.splice(i, 1);
            };
            return this;
        };

//-------------end
        return $}(window));




//------------------------------------------------
// 对话框模块
//------------------------------------------------
    ;(function ($, window, undefined) {

        $.noop = $.noop || function () {}; // jQuery 1.3.2
        var _box, _thisScript, _skin, _path,
            _count = 0,
            _$window = $(window),
            _$document = $(document),
            _$html = $('html'),
            _elem = document.documentElement,
            _isIE6 = window.VBArray && !window.XMLHttpRequest,
            _isMobile = 'createTouch' in document && !('onmousemove' in _elem)
                || /(iPhone|iPad|iPod)/i.test(navigator.userAgent),
            _expando = 'artDialog' + + new Date;

        var artDialog = function (config, ok, cancel) {
            config = config || {};

            if (typeof config === 'string' || config.nodeType === 1) {
                config = {content: config, fixed: !_isMobile};
            };

            var api,
                defaults = artDialog.defaults,
                elem = config.follow = this.nodeType === 1 && this || config.follow;

            // 合并默认配置
            for (var i in defaults) {
                if (config[i] === undefined) config[i] = defaults[i];
            };

            // 兼容v4.1.0之前的参数，未来版本将删除此
            $.each({ok:"yesFn",cancel:"noFn",close:"closeFn",init:"initFn",okVal:"yesText",cancelVal:"noText"},
                function(i,o){config[i]=config[i]!==undefined?config[i]:config[o]});

            // 返回跟随模式或重复定义的ID
            if (typeof elem === 'string') elem = $(elem)[0];
            config.id = elem && elem[_expando + 'follow'] || config.id || _expando + _count;
            api = artDialog.list[config.id];
            if (elem && api) return api.follow(elem).zIndex().focus();
            art.PHPCMS_API = art.PHPCMS_API || [];
            var that_Api = art.PHPCMS_API[config.id];
            if (typeof that_Api == 'object' && api) {
                api.data = {};
                api.data.iframe = that_Api
            };
            if (api) return api.zIndex().focus();

            // 目前主流移动设备对fixed支持不好
            if (_isMobile) config.fixed = false;

            // 按钮队列
            if (!$.isArray(config.button)) {
                config.button = config.button ? [config.button] : [];
            };
            if (ok !== undefined) config.ok = ok;
            if (cancel !== undefined) config.cancel = cancel;
            config.ok && config.button.push({
                name: config.okVal,
                callback: config.ok,
                focus: true
            });
            config.cancel && config.button.push({
                name: config.cancelVal,
                callback: config.cancel
            });

            // zIndex全局配置
            artDialog.defaults.zIndex = config.zIndex;

            _count ++;

            return artDialog.list[config.id] = _box ?
                _box._init(config) : new artDialog.fn._init(config);
        };

        artDialog.fn = artDialog.prototype = {

            version: '4.1.6',

            closed: true,

            _init: function (config) {
                var that = this, DOM,
                    icon = config.icon,
                    iconBg = icon && (_isIE6 ? {png: 'icons/' + icon + '.png'}
                        : {backgroundImage: 'url(\'' + config.path + '/skins/icons/' + icon + '.png\')'});

                that.closed = false;
                that.config = config;
                that.DOM = DOM = that.DOM || that._getDOM();

                DOM.wrap.addClass(config.skin);
                DOM.close[config.cancel === false ? 'hide' : 'show']();
                DOM.icon[0].style.display = icon ? '' : 'none';
                DOM.iconBg.css(iconBg || {background: 'none'});
                DOM.se.css('cursor', config.resize ? 'se-resize' : 'auto');
                DOM.title.css('cursor', config.drag ? 'move' : 'auto');
                DOM.content.css('padding', config.padding);

                that[config.show ? 'show' : 'hide'](true)
                that.button(config.button)
                    .title(config.title)
                    .content(config.content, config.iframe)
                    .size(config.width, config.height)
                    .time(config.time);

                config.follow
                    ? that.follow(config.follow)
                    : that.position(config.left, config.top);

                that.zIndex().focus();

                config.lock && that.lock();

                that._addEvent();
                that._ie6PngFix();
                _box = null;

                config.init && config.init.call(that, window);

                return that;
            },

            /**
             * 设置内容
             * @param	{String, HTMLElement}	内容 (可选)
             * @return	{this, HTMLElement}		如果无参数则返回内容容器DOM对象
             */
            content: function (msg,url) {
                var prev, next, parent, display,
                    that = this,
                    DOM = that.DOM,
                    wrap = DOM.wrap[0],
                    width = wrap.offsetWidth,

                    height = wrap.offsetHeight,
                    left = parseInt(wrap.style.left),
                    top = parseInt(wrap.style.top),
                    cssWidth = wrap.style.width,
                    $content = DOM.content,
                    content = $content[0];
                that._reset(1);
                iframe = null,
                    isIframe = typeof url == 'string' && url != '',
                    iframrId = 'atrDialogIframe_' + that.config.id;
                if (isIframe) {
                    if (typeof pc_hash == 'string') url += (url.indexOf('?') > -1 ? '&': '?') + 'pc_hash=' + pc_hash;
                    iframe = document.createElement('iframe');
                    iframe.setAttribute("frameborder", 0, 0);
                    iframe.setAttribute("width", that.config.width);
                    iframe.setAttribute("height", that.config.height);
                    iframe.setAttribute("padding", '0');
                    iframe.setAttribute("id", iframrId);
                    iframe.src = url;
                    that.DOM.content.css('padding', "5px 0px");
                    that.DOM.content.css('height', that.config.height);

                    msg = iframe;
                };
                that._elemBack && that._elemBack();

                wrap.style.width = 'auto';

                if (msg === undefined) return content;
                if (typeof msg === 'string') {
                    $content.html(msg);
                } else if (msg && msg.nodeType === 1) {

                    // 让传入的元素在对话框关闭后可以返回到原来的地方
                    display = msg.style.display;
                    prev = msg.previousSibling;
                    next = msg.nextSibling;
                    parent = msg.parentNode;
                    that._elemBack = function () {
                        if (prev && prev.parentNode) {
                            prev.parentNode.insertBefore(msg, prev.nextSibling);
                        } else if (next && next.parentNode) {
                            next.parentNode.insertBefore(msg, next);
                        } else if (parent) {
                            parent.appendChild(msg);
                        };
                        msg.style.display = display;
                        that._elemBack = null;
                    };

                    $content.html('');
                    content.appendChild(msg);
                    msg.style.display = 'block';
                    //content.focus();
                    //alert('1');

                    if (isIframe) art.PHPCMS_API[that.config.id] = msg.contentWindow
                };

                // 新增内容后调整位置
                if (!arguments[1]) {
                    if (that.config.follow) {
                        that.follow(that.config.follow);
                    } else {
                        width = wrap.offsetWidth - width;
                        height = wrap.offsetHeight - height;
                        left = left - width / 2;
                        top = top - height / 2;
                        wrap.style.left = Math.max(left, 0) + 'px';
                        wrap.style.top = Math.max(top, 0) + 'px';
                    };
                    if (cssWidth && cssWidth !== 'auto') {
                        wrap.style.width = wrap.offsetWidth + 'px';
                    };
                    that._autoPositionType();
                };

                that._ie6SelectFix();
                that._runScript(content);

                return that;
            },

            /**
             * 设置标题
             * @param	{String, Boolean}	标题内容. 为false则隐藏标题栏
             * @return	{this, HTMLElement}	如果无参数则返回内容器DOM对象
             */
            title: function (text) {
                var DOM = this.DOM,
                    wrap = DOM.wrap,
                    title = DOM.title,
                    className = 'aui_state_noTitle';

                if (text === undefined) return title[0];
                if (text === false) {
                    title.hide().html('');
                    wrap.addClass(className);
                } else {
                    title.show().html(text || '');
                    wrap.removeClass(className);
                };

                return this;
            },

            /**
             * 位置(相对于可视区域)
             * @param	{Number, String}
             * @param	{Number, String}
             */
            position: function (left, top) {
                var that = this,
                    config = that.config,
                    wrap = that.DOM.wrap[0],
                    isFixed = _isIE6 ? false : config.fixed,
                    ie6Fixed = _isIE6 && that.config.fixed,
                    docLeft = _$document.scrollLeft(),
                    docTop = _$document.scrollTop(),
                    dl = isFixed ? 0 : docLeft,
                    dt = isFixed ? 0 : docTop,
                    ww = _$window.width(),
                    wh = _$window.height(),
                    ow = wrap.offsetWidth,
                    oh = wrap.offsetHeight,
                    style = wrap.style;

                if (left || left === 0) {
                    that._left = left.toString().indexOf('%') !== -1 ? left : null;
                    left = that._toNumber(left, ww - ow);

                    if (typeof left === 'number') {
                        left = ie6Fixed ? (left += docLeft) : left + dl;
                        style.left = Math.max(left, dl) + 'px';
                    } else if (typeof left === 'string') {
                        style.left = left;
                    };
                };

                if (top || top === 0) {
                    that._top = top.toString().indexOf('%') !== -1 ? top : null;
                    top = that._toNumber(top, wh - oh);

                    if (typeof top === 'number') {
                        top = ie6Fixed ? (top += docTop) : top + dt;
                        style.top = Math.max(top, dt) + 'px';
                    } else if (typeof top === 'string') {
                        style.top = top;
                    };
                };

                if (left !== undefined && top !== undefined) {
                    that._follow = null;
                    that._autoPositionType();
                };

                return that;
            },

            /**
             *	尺寸
             *	@param	{Number, String}	宽度
             *	@param	{Number, String}	高度
             */
            size: function (width, height) {
                var maxWidth, maxHeight, scaleWidth, scaleHeight,
                    that = this,
                    config = that.config,
                    DOM = that.DOM,
                    wrap = DOM.wrap,
                    main = DOM.main,
                    wrapStyle = wrap[0].style,
                    style = main[0].style;

                if (width) {
                    that._width = width.toString().indexOf('%') !== -1 ? width : null;
                    maxWidth = _$window.width() - wrap[0].offsetWidth + main[0].offsetWidth;
                    scaleWidth = that._toNumber(width, maxWidth);
                    width = scaleWidth;

                    if (typeof width === 'number') {
                        wrapStyle.width = 'auto';
                        style.width = Math.max(that.config.minWidth, width) + 'px';
                        wrapStyle.width = wrap[0].offsetWidth + 'px'; // 防止未定义宽度的表格遇到浏览器右边边界伸缩
                    } else if (typeof width === 'string') {
                        style.width = width;
                        width === 'auto' && wrap.css('width', 'auto');
                    };
                };

                if (height) {
                    that._height = height.toString().indexOf('%') !== -1 ? height : null;
                    maxHeight = _$window.height() - wrap[0].offsetHeight + main[0].offsetHeight;
                    scaleHeight = that._toNumber(height, maxHeight);
                    height = scaleHeight;
                    //alert(height);
                    if (typeof height === 'number') {
                        style.height = Math.max(that.config.minHeight, height) + 'px';
                    } else if (typeof height === 'string') {
                        style.height = height;
                        //height === 'auto' && wrap.css('height', 'auto');
                    };
                };

                that._ie6SelectFix();

                return that;
            },

            /**
             * 跟随元素
             * @param	{HTMLElement, String}
             */
            follow: function (elem) {
                var $elem, that = this, config = that.config;

                if (typeof elem === 'string' || elem && elem.nodeType === 1) {
                    $elem = $(elem);
                    elem = $elem[0];
                };

                // 隐藏元素不可用
                if (!elem || !elem.offsetWidth && !elem.offsetHeight) {
                    return that.position(that._left, that._top);
                };

                var expando = _expando + 'follow',
                    winWidth = _$window.width(),
                    winHeight = _$window.height(),
                    docLeft =  _$document.scrollLeft(),
                    docTop = _$document.scrollTop(),
                    offset = $elem.offset(),
                    width = elem.offsetWidth,
                    height = elem.offsetHeight,
                    isFixed = _isIE6 ? false : config.fixed,
                    left = isFixed ? offset.left - docLeft : offset.left,
                    top = isFixed ? offset.top - docTop : offset.top,
                    wrap = that.DOM.wrap[0],
                    style = wrap.style,
                    wrapWidth = wrap.offsetWidth,
                    wrapHeight = wrap.offsetHeight,
                    setLeft = left - (wrapWidth - width) / 2,
                    setTop = top + height,
                    dl = isFixed ? 0 : docLeft,
                    dt = isFixed ? 0 : docTop;

                setLeft = setLeft < dl ? left :
                    (setLeft + wrapWidth > winWidth) && (left - wrapWidth > dl)
                        ? left - wrapWidth + width
                        : setLeft;

                setTop = (setTop + wrapHeight > winHeight + dt)
                    && (top - wrapHeight > dt)
                    ? top - wrapHeight
                    : setTop;

                style.left = setLeft + 'px';
                style.top = setTop + 'px';

                that._follow && that._follow.removeAttribute(expando);
                that._follow = elem;
                elem[expando] = config.id;
                that._autoPositionType();
                return that;
            },

            /**
             * 自定义按钮
             * @example
             button({
			name: 'login',
			callback: function () {},
			disabled: false,
			focus: true
		}, .., ..)
             */
            button: function () {
                var that = this,
                    ags = arguments,
                    DOM = that.DOM,
                    buttons = DOM.buttons,
                    elem = buttons[0],
                    strongButton = 'aui_state_highlight',
                    listeners = that._listeners = that._listeners || {},
                    list = $.isArray(ags[0]) ? ags[0] : [].slice.call(ags);

                if (ags[0] === undefined) return elem;
                $.each(list, function (i, val) {
                    var name = val.name,
                        isNewButton = !listeners[name],
                        button = !isNewButton ?
                            listeners[name].elem :
                            document.createElement('button');

                    if (!listeners[name]) listeners[name] = {};
                    if (val.callback) listeners[name].callback = val.callback;
                    if (val.className) button.className = val.className;
                    if (val.focus) {
                        that._focus && that._focus.removeClass(strongButton);
                        that._focus = $(button).addClass(strongButton);
                        that.focus();
                    };

                    // Internet Explorer 的默认类型是 "button"，
                    // 而其他浏览器中（包括 W3C 规范）的默认值是 "submit"
                    // @see http://www.w3school.com.cn/tags/att_button_type.asp
                    button.setAttribute('type', 'button');

                    button[_expando + 'callback'] = name;
                    button.disabled = !!val.disabled;

                    if (isNewButton) {
                        button.innerHTML = name;
                        listeners[name].elem = button;
                        elem.appendChild(button);
                    };
                });

                buttons[0].style.display = list.length ? '' : 'none';

                that._ie6SelectFix();
                return that;
            },

            /** 显示对话框 */
            show: function () {
                this.DOM.wrap.show();
                !arguments[0] && this._lockMaskWrap && this._lockMaskWrap.show();
                return this;
            },

            /** 隐藏对话框 */
            hide: function () {
                this.DOM.wrap.hide();
                !arguments[0] && this._lockMaskWrap && this._lockMaskWrap.hide();
                return this;
            },

            /** 关闭对话框 */
            close: function () {
                if (this.closed) return this;

                var that = this,
                    DOM = that.DOM,
                    wrap = DOM.wrap,
                    list = artDialog.list,
                    fn = that.config.close,
                    follow = that.config.follow;

                that.time();
                if (typeof fn === 'function' && fn.call(that, window) === false) {
                    return that;
                };

                that.unlock();

                // 置空内容
                that._elemBack && that._elemBack();
                wrap[0].className = wrap[0].style.cssText = '';
                DOM.title.html('');
                DOM.content.html('');
                DOM.buttons.html('');

                if (artDialog.focus === that) artDialog.focus = null;
                if (follow) follow.removeAttribute(_expando + 'follow');
                delete list[that.config.id];
                that._removeEvent();
                that.hide(true)._setAbsolute();

                // 清空除this.DOM之外临时对象，恢复到初始状态，以便使用单例模式
                for (var i in that) {
                    if (that.hasOwnProperty(i)) delete that[i];
                };

                // 移除HTMLElement或重用
                _box ? wrap.remove() : _box = that;

                return that;
            },

            /**
             * 定时关闭
             * @param	{Number}	单位为秒, 无参数则停止计时器
             */
            time: function (second) {
                var that = this,
                    cancel = that.config.cancelVal,
                    timer = that._timer;

                timer && clearTimeout(timer);

                if (second) {
                    that._timer = setTimeout(function(){
                        that._click(cancel);
                    }, 1000 * second);
                };

                return that;
            },

            /** 设置焦点 */
            focus: function () {
                try {
                    var elem = this._focus && this._focus[0] || this.DOM.close[0];
                    elem && elem.focus();
                } catch (e) {}; // IE对不可见元素设置焦点会报错
                return this;
            },

            /** 置顶对话框 */
            zIndex: function () {
                var that = this,
                    DOM = that.DOM,
                    wrap = DOM.wrap,
                    top = artDialog.focus,
                    index = artDialog.defaults.zIndex ++;

                // 设置叠加高度
                wrap.css('zIndex', index);
                that._lockMask && that._lockMask.css('zIndex', index - 1);

                // 设置最高层的样式
                top && top.DOM.wrap.removeClass('aui_state_focus');
                artDialog.focus = that;
                wrap.addClass('aui_state_focus');

                return that;
            },

            /** 设置屏锁 */
            lock: function () {
                if (this._lock) return this;

                var that = this,
                    index = artDialog.defaults.zIndex - 1,
                    wrap = that.DOM.wrap,
                    config = that.config,
                    docWidth = _$document.width(),
                    docHeight = _$document.height(),
                    lockMaskWrap = that._lockMaskWrap || $(document.body.appendChild(document.createElement('div'))),
                    lockMask = that._lockMask || $(lockMaskWrap[0].appendChild(document.createElement('div'))),
                    domTxt = '(document).documentElement',
                    sizeCss = _isMobile ? 'width:' + docWidth + 'px;height:' + docHeight
                        + 'px' : 'width:100%;height:100%',
                    ie6Css = _isIE6 ?
                        'position:absolute;left:expression(' + domTxt + '.scrollLeft);top:expression('
                            + domTxt + '.scrollTop);width:expression(' + domTxt
                            + '.clientWidth);height:expression(' + domTxt + '.clientHeight)'
                        : '';

                that.zIndex();
                wrap.addClass('aui_state_lock');

                lockMaskWrap[0].style.cssText = sizeCss + ';position:fixed;z-index:'
                    + index + ';top:0;left:0;overflow:hidden;' + ie6Css;
                lockMask[0].style.cssText = 'height:100%;background:' + config.background
                    + ';filter:alpha(opacity=0);opacity:0';

                // 让IE6锁屏遮罩能够盖住下拉控件
                if (_isIE6) lockMask.html(
                    '<iframe src="about:blank" style="width:100%;height:100%;position:absolute;' +
                        'top:0;left:0;z-index:-1;filter:alpha(opacity=0)"></iframe>');

                lockMask.stop();
                lockMask.bind('click', function () {
                    that._reset();
                }).bind('dblclick', function () {
                        that._click(that.config.cancelVal);
                    });

                if (config.duration === 0) {
                    lockMask.css({opacity: config.opacity});
                } else {
                    lockMask.animate({opacity: config.opacity}, config.duration);
                };

                that._lockMaskWrap = lockMaskWrap;
                that._lockMask = lockMask;

                that._lock = true;
                return that;
            },

            /** 解开屏锁 */
            unlock: function () {
                var that = this,
                    lockMaskWrap = that._lockMaskWrap,
                    lockMask = that._lockMask;

                if (!that._lock) return that;
                var style = lockMaskWrap[0].style;
                var un = function () {
                    if (_isIE6) {
                        style.removeExpression('width');
                        style.removeExpression('height');
                        style.removeExpression('left');
                        style.removeExpression('top');
                    };
                    style.cssText = 'display:none';

                    _box && lockMaskWrap.remove();
                };

                lockMask.stop().unbind();
                that.DOM.wrap.removeClass('aui_state_lock');
                if (!that.config.duration) {// 取消动画，快速关闭
                    un();
                } else {
                    lockMask.animate({opacity: 0}, that.config.duration, un);
                };

                that._lock = false;
                return that;
            },

            // 获取元素
            _getDOM: function () {
                var wrap = document.createElement('div'),
                    body = document.body;
                wrap.style.cssText = 'position:absolute;left:0;top:0';
                wrap.innerHTML = artDialog._templates;
                body.insertBefore(wrap, body.firstChild);

                var name, i = 0,
                    DOM = {wrap: $(wrap)},
                    els = wrap.getElementsByTagName('*'),
                    elsLen = els.length;

                for (; i < elsLen; i ++) {
                    name = els[i].className.split('aui_')[1];
                    if (name) DOM[name] = $(els[i]);
                };

                return DOM;
            },

            // px与%单位转换成数值 (百分比单位按照最大值换算)
            // 其他的单位返回原值
            _toNumber: function (thisValue, maxValue) {
                if (!thisValue && thisValue !== 0 || typeof thisValue === 'number') {
                    return thisValue;
                };

                var last = thisValue.length - 1;
                if (thisValue.lastIndexOf('px') === last) {
                    thisValue = parseInt(thisValue);
                } else if (thisValue.lastIndexOf('%') === last) {
                    thisValue = parseInt(maxValue * thisValue.split('%')[0] / 100);
                };

                return thisValue;
            },

            // 让IE6 CSS支持PNG背景
            _ie6PngFix: _isIE6 ? function () {
                var i = 0, elem, png, pngPath, runtimeStyle,
                    path = artDialog.defaults.path + '/skins/',
                    list = this.DOM.wrap[0].getElementsByTagName('*');

                for (; i < list.length; i ++) {
                    elem = list[i];
                    png = elem.currentStyle['png'];
                    if (png) {
                        pngPath = path + png;
                        runtimeStyle = elem.runtimeStyle;
                        runtimeStyle.backgroundImage = 'none';
                        runtimeStyle.filter = "progid:DXImageTransform.Microsoft." +
                            "AlphaImageLoader(src='" + pngPath + "',sizingMethod='crop')";
                    };
                };
            } : $.noop,

            // 强制覆盖IE6下拉控件
            _ie6SelectFix: _isIE6 ? function () {
                var $wrap = this.DOM.wrap,
                    wrap = $wrap[0],
                    expando = _expando + 'iframeMask',
                    iframe = $wrap[expando],
                    width = wrap.offsetWidth,
                    height = wrap.offsetHeight;

                width = width + 'px';
                height = height + 'px';
                if (iframe) {
                    iframe.style.width = width;
                    iframe.style.height = height;
                } else {
                    iframe = wrap.appendChild(document.createElement('iframe'));
                    $wrap[expando] = iframe;
                    iframe.src = 'about:blank';
                    iframe.style.cssText = 'position:absolute;z-index:-1;left:0;top:0;'
                        + 'filter:alpha(opacity=0);width:' + width + ';height:' + height;
                };
            } : $.noop,

            // 解析HTML片段中自定义类型脚本，其this指向artDialog内部
            // <script type="text/dialog">/* [code] */</script>
            _runScript: function (elem) {
                var fun, i = 0, n = 0,
                    tags = elem.getElementsByTagName('script'),
                    length = tags.length,
                    script = [];

                for (; i < length; i ++) {
                    if (tags[i].type === 'text/dialog') {
                        script[n] = tags[i].innerHTML;
                        n ++;
                    };
                };

                if (script.length) {
                    script = script.join('');
                    fun = new Function(script);
                    fun.call(this);
                };
            },

            // 自动切换定位类型
            _autoPositionType: function () {
                this[this.config.fixed ? '_setFixed' : '_setAbsolute']();/////////////
            },


            // 设置静止定位
            // IE6 Fixed @see: http://www.planeart.cn/?p=877
            _setFixed: (function () {
                _isIE6 && $(function () {
                    var bg = 'backgroundAttachment';
                    if (_$html.css(bg) !== 'fixed' && $('body').css(bg) !== 'fixed') {
                        _$html.css({
                            zoom: 1,// 避免偶尔出现body背景图片异常的情况
                            backgroundImage: 'url(about:blank)',
                            backgroundAttachment: 'fixed'
                        });
                    };
                });

                return function () {
                    var $elem = this.DOM.wrap,
                        style = $elem[0].style;

                    if (_isIE6) {
                        var left = parseInt($elem.css('left')),
                            top = parseInt($elem.css('top')),
                            sLeft = _$document.scrollLeft(),
                            sTop = _$document.scrollTop(),
                            txt = '(document.documentElement)';

                        this._setAbsolute();
                        style.setExpression('left', 'eval(' + txt + '.scrollLeft + '
                            + (left - sLeft) + ') + "px"');
                        style.setExpression('top', 'eval(' + txt + '.scrollTop + '
                            + (top - sTop) + ') + "px"');
                    } else {
                        style.position = 'fixed';
                    };
                };
            }()),

            // 设置绝对定位
            _setAbsolute: function () {
                var style = this.DOM.wrap[0].style;

                if (_isIE6) {
                    style.removeExpression('left');
                    style.removeExpression('top');
                };

                style.position = 'absolute';
            },

            // 按钮回调函数触发
            _click: function (name) {
                var that = this,
                    fn = that._listeners[name] && that._listeners[name].callback;
                return typeof fn !== 'function' || fn.call(that, window) !== false ?
                    that.close() : that;
            },

            // 重置位置与尺寸
            _reset: function (test) {
                var newSize,
                    that = this,
                    oldSize = that._winSize || _$window.width() * _$window.height(),
                    elem = that._follow,
                    width = that._width,
                    height = that._height,
                    left = that._left,
                    top = that._top;

                if (test) {
                    // IE6~7 window.onresize bug

                    newSize = that._winSize =  _$window.width() * _$window.height();
                    if (oldSize === newSize) return;
                };

                if (width || height) that.size(width, height);

                if (elem) {
                    that.follow(elem);
                } else if (left || top) {
                    that.position(left, top);
                };
            },

            // 事件代理
            _addEvent: function () {
                var resizeTimer,
                    that = this,
                    config = that.config,
                    isIE = 'CollectGarbage' in window,
                    DOM = that.DOM;

                // 窗口调节事件
                that._winResize = function () {
                    resizeTimer && clearTimeout(resizeTimer);
                    resizeTimer = setTimeout(function () {
                        that._reset(isIE);
                    }, 40);
                };
                _$window.bind('resize', that._winResize);

                // 监听点击
                DOM.wrap
                    .bind('click', function (event) {
                        var target = event.target, callbackID;

                        if (target.disabled) return false; // IE BUG

                        if (target === DOM.close[0]) {
                            that._click(config.cancelVal);
                            return false;
                        } else {
                            callbackID = target[_expando + 'callback'];
                            callbackID && that._click(callbackID);
                        };

                        that._ie6SelectFix();
                    })
                    .bind('mousedown', function () {
                        that.zIndex();
                    });
            },

            // 卸载事件代理
            _removeEvent: function () {
                var that = this,
                    DOM = that.DOM;

                DOM.wrap.unbind();
                _$window.unbind('resize', that._winResize);
            }

        };

        artDialog.fn._init.prototype = artDialog.fn;
        $.fn.dialog = $.fn.artDialog = function () {
            var config = arguments;
            this[this.live ? 'live' : 'bind']('click', function () {
                artDialog.apply(this, config);
                return false;
            });
            return this;
        };



        /** 最顶层的对话框API */
        artDialog.focus = null;


        /** 获取某对话框API */
        artDialog.get = function (id) {
            return id === undefined
                ? artDialog.list
                : artDialog.list[id];
        };

        artDialog.list = {};



// 全局快捷键
        _$document.bind('keydown', function (event) {
            var target = event.target,
                nodeName = target.nodeName,
                rinput = /^INPUT|TEXTAREA$/,
                api = artDialog.focus,
                keyCode = event.keyCode;

            if (!api || !api.config.esc || rinput.test(nodeName)) return;

            keyCode === 27 && api._click(api.config.cancelVal);
        });



// 获取artDialog路径
        _path = window['_artDialog_path'] || (function (script, i, me) {
            for (i in script) {
                // 如果通过第三方脚本加载器加载本文件，请保证文件名含有"artDialog"字符
                if (script[i].src && script[i].src.indexOf('artDialog') !== -1) me = script[i];
            };

            _thisScript = me || script[script.length - 1];
            me = _thisScript.src.replace(/\\/g, '/');
            return me.lastIndexOf('/') < 0 ? '.' : me.substring(0, me.lastIndexOf('/'));
        }(document.getElementsByTagName('script')));



// 无阻塞载入CSS (如"artDialog.js?skin=aero")
        _skin = _thisScript.src.split('skin=')[1];
        if (_skin) {
            var link = document.createElement('link');
            link.rel = 'stylesheet';
            link.href = _path + '/skins/' + _skin + '.css?' + artDialog.fn.version;
            _thisScript.parentNode.insertBefore(link, _thisScript);
        };



// 触发浏览器预先缓存背景图片
        _$window.bind('load', function () {
            setTimeout(function () {
                if (_count) return;
                artDialog({left: '-9999em',time: 9,fixed: false,lock: false,focus: false});
            }, 150);
        });



// 开启IE6 CSS背景图片缓存
        try {
            document.execCommand('BackgroundImageCache', false, true);
        } catch (e) {};




// 使用uglifyjs压缩能够预先处理"+"号合并字符串
// uglifyjs: http://marijnhaverbeke.nl/uglifyjs
        artDialog._templates =
            '<div class="aui_outer">'
                +	'<table class="aui_border">'
                +		'<tbody>'
                +			'<tr>'
                +				'<td class="aui_nw"></td>'
                +				'<td class="aui_n"></td>'
                +				'<td class="aui_ne"></td>'
                +			'</tr>'
                +			'<tr>'
                +				'<td class="aui_w"></td>'
                +				'<td class="aui_c">'
                +					'<div class="aui_inner">'
                +					'<table class="aui_dialog">'
                +						'<tbody>'
                +							'<tr>'
                +								'<td colspan="2" class="aui_header">'
                +									'<div class="aui_titleBar">'
                +										'<div class="aui_title"></div>'
                +										'<a class="aui_close" href="javascript:/*artDialog*/;">'
                +											'\xd7'
                +										'</a>'
                +									'</div>'
                +								'</td>'
                +							'</tr>'
                +							'<tr>'
                +								'<td class="aui_icon">'
                +									'<div class="aui_iconBg"></div>'
                +								'</td>'
                +								'<td class="aui_main">'
                +									'<div class="aui_content"></div>'
                +								'</td>'
                +							'</tr>'
                +							'<tr>'
                +								'<td colspan="2" class="aui_footer">'
                +									'<div class="aui_buttons"></div>'
                +								'</td>'
                +							'</tr>'
                +						'</tbody>'
                +					'</table>'
                +					'</div>'
                +				'</td>'
                +				'<td class="aui_e"></td>'
                +			'</tr>'
                +			'<tr>'
                +				'<td class="aui_sw"></td>'
                +				'<td class="aui_s"></td>'
                +				'<td class="aui_se"></td>'
                +			'</tr>'
                +		'</tbody>'
                +	'</table>'
                +'</div>';



        /**
         * 默认配置
         */
        artDialog.defaults = {
            // 消息内容
            content: '<div class="aui_loading"><span>loading..</span></div>',
            title: '\u6d88\u606f',		// 标题. 默认'消息'
            button: null,				// 自定义按钮
            ok: null,					// 确定按钮回调函数
            cancel: null,				// 取消按钮回调函数
            init: null,					// 对话框初始化后执行的函数
            close: null,				// 对话框关闭前执行的函数
            okVal: '\u786E\u5B9A',		// 确定按钮文本. 默认'确定'
            cancelVal: '\u53D6\u6D88',	// 取消按钮文本. 默认'取消'
            width: 'auto',				// 内容宽度
            height: 'auto',				// 内容高度
            minWidth: 96,				// 最小宽度限制
            minHeight: 32,				// 最小高度限制
            padding: '20px 25px',		// 内容与边界填充距离
            skin: '',					// 皮肤名(预留接口,尚未实现)
            icon: null,					// 消息图标名称
            time: null,					// 自动关闭时间
            esc: true,					// 是否支持Esc键关闭
            focus: true,				// 是否支持对话框按钮自动聚焦
            show: true,					// 初始化后是否显示对话框
            follow: null,				// 跟随某元素(即让对话框在元素附近弹出)
            path: _path,				// artDialog路径
            lock: true,				// 是否锁屏
            background: '#000',			// 遮罩颜色
            opacity: .7,				// 遮罩透明度
            duration: 300,				// 遮罩透明度渐变动画速度
            fixed: false,				// 是否静止定位
            left: '50%',				// X轴坐标
            top: '38.2%',				// Y轴坐标
            zIndex: 1987,				// 对话框叠加高度值(重要：此值不能超过浏览器最大限制)
            resize: true,				// 是否允许用户调节尺寸
            drag: true					// 是否允许用户拖动位置

        };

        window.artDialog = $.dialog = $.artDialog = artDialog;
    }(this.art || this.jQuery && (this.art = jQuery), this));






//------------------------------------------------
// 对话框模块-拖拽支持（可选外置模块）
//------------------------------------------------
    ;(function ($) {

        var _dragEvent, _use,
            _$window = $(window),
            _$document = $(document),
            _elem = document.documentElement,
            _isIE6 = !('minWidth' in _elem.style),
            _isLosecapture = 'onlosecapture' in _elem,
            _isSetCapture = 'setCapture' in _elem;

// 拖拽事件
        artDialog.dragEvent = function () {
            var that = this,
                proxy = function (name) {
                    var fn = that[name];
                    that[name] = function () {
                        return fn.apply(that, arguments);
                    };
                };

            proxy('start');
            proxy('move');
            proxy('end');
        };

        artDialog.dragEvent.prototype = {

            // 开始拖拽
            onstart: $.noop,
            start: function (event) {
                _$document
                    .bind('mousemove', this.move)
                    .bind('mouseup', this.end);

                this._sClientX = event.clientX;
                this._sClientY = event.clientY;
                this.onstart(event.clientX, event.clientY);

                return false;
            },

            // 正在拖拽
            onmove: $.noop,
            move: function (event) {
                this._mClientX = event.clientX;
                this._mClientY = event.clientY;
                this.onmove(
                    event.clientX - this._sClientX,
                    event.clientY - this._sClientY
                );

                return false;
            },

            // 结束拖拽
            onend: $.noop,
            end: function (event) {
                _$document
                    .unbind('mousemove', this.move)
                    .unbind('mouseup', this.end);

                this.onend(event.clientX, event.clientY);
                return false;
            }

        };

        _use = function (event) {
            var limit, startWidth, startHeight, startLeft, startTop, isResize,
                api = artDialog.focus,
            //config = api.config,
                DOM = api.DOM,
                wrap = DOM.wrap,
                title = DOM.title,
                main = DOM.main;

            // 清除文本选择
            var clsSelect = 'getSelection' in window ? function () {
                window.getSelection().removeAllRanges();
            } : function () {
                try {
                    document.selection.empty();
                } catch (e) {};
            };

            // 对话框准备拖动
            _dragEvent.onstart = function (x, y) {
                if (isResize) {
                    startWidth = main[0].offsetWidth;
                    startHeight = main[0].offsetHeight;
                } else {
                    startLeft = wrap[0].offsetLeft;
                    startTop = wrap[0].offsetTop;
                };

                _$document.bind('dblclick', _dragEvent.end);
                !_isIE6 && _isLosecapture ?
                    title.bind('losecapture', _dragEvent.end) :
                    _$window.bind('blur', _dragEvent.end);
                _isSetCapture && title[0].setCapture();

                wrap.addClass('aui_state_drag');
                api.focus();
            };

            // 对话框拖动进行中
            _dragEvent.onmove = function (x, y) {
                if (isResize) {
                    var wrapStyle = wrap[0].style,
                        style = main[0].style,
                        width = x + startWidth,
                        height = y + startHeight;

                    wrapStyle.width = 'auto';
                    style.width = Math.max(0, width) + 'px';
                    wrapStyle.width = wrap[0].offsetWidth + 'px';

                    style.height = Math.max(0, height) + 'px';

                } else {
                    var style = wrap[0].style,
                        left = Math.max(limit.minX, Math.min(limit.maxX, x + startLeft)),
                        top = Math.max(limit.minY, Math.min(limit.maxY, y + startTop));

                    style.left = left  + 'px';
                    style.top = top + 'px';
                };

                clsSelect();
                api._ie6SelectFix();
            };

            // 对话框拖动结束
            _dragEvent.onend = function (x, y) {
                _$document.unbind('dblclick', _dragEvent.end);
                !_isIE6 && _isLosecapture ?
                    title.unbind('losecapture', _dragEvent.end) :
                    _$window.unbind('blur', _dragEvent.end);
                _isSetCapture && title[0].releaseCapture();

                _isIE6 && !api.closed && api._autoPositionType();

                wrap.removeClass('aui_state_drag');
            };

            isResize = event.target === DOM.se[0] ? true : false;
            limit = (function () {
                var maxX, maxY,
                    wrap = api.DOM.wrap[0],
                    fixed = wrap.style.position === 'fixed',
                    ow = wrap.offsetWidth,
                    oh = wrap.offsetHeight,
                    ww = _$window.width(),
                    wh = _$window.height(),
                    dl = fixed ? 0 : _$document.scrollLeft(),
                    dt = fixed ? 0 : _$document.scrollTop(),

                // 坐标最大值限制
                    maxX = ww - ow + dl;
                maxY = wh - oh + dt;

                return {
                    minX: dl,
                    minY: dt,
                    maxX: maxX,
                    maxY: maxY
                };
            })();

            _dragEvent.start(event);
        };

// 代理 mousedown 事件触发对话框拖动
        _$document.bind('mousedown', function (event) {
            var api = artDialog.focus;
            if (!api) return;

            var target = event.target,
                config = api.config,
                DOM = api.DOM;

            if (config.drag !== false && target === DOM.title[0]
                || config.resize !== false && target === DOM.se[0]) {
                _dragEvent = _dragEvent || new artDialog.dragEvent();
                _use(event);
                return false;// 防止firefox与chrome滚屏
            };
        });

    })(this.art || this.jQuery && (this.art = jQuery));
});


